/**
 * 
 */
package com.foreveross.chameleon.push.cubeparser.type;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.Map.Entry;

import com.foreveross.push.tool.Pool;
import com.foreveross.router.MappingModel;
import com.foreveross.router.RoutingParserHelper;

import android.annotation.SuppressLint;

/**
 * [一句话功能简述]<BR>
 * [功能详细描述]
 * 
 * @author 冯伟立
 * @version [CubeAndroid, 2013-8-22]
 */
public abstract class AbstractMessage<T> extends BaseModel<T, Long> {

	private Long id;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public AbstractMessage() {
		super();
	}

	/**
	 * [作用描述]
	 */
	protected long sendTime = System.currentTimeMillis();
	protected String messsageId;
	protected String title;
	protected String content;
	protected String groupBelong = "未知";
	protected boolean hasRead = false;
	protected String moduleUrl ;
	protected String moduleID ;
	protected String moduleName ;
	
	
	

	public String getModuleName() {
		return moduleName;
	}

	public void setModuleName(String moduleName) {
		this.moduleName = moduleName;
	}

	public String getModuleID() {
		return moduleID;
	}

	public void setModuleID(String moduleID) {
		this.moduleID = moduleID;
	}

	public String getModuleUrl() {
		return moduleUrl;
	}

	public void setModuleUrl(String moduleUrl) {
		this.moduleUrl = moduleUrl;
	}


	public boolean isHasRead() {
		return hasRead;
	}

	public void setHasRead(boolean hasRead) {
		this.hasRead = hasRead;
	}

	protected boolean editable = false;
	protected boolean selected = false;

	public AbstractMessage(long sendTime, String messsageId, String title,
			String content) {
		super();
		this.sendTime = sendTime;
		this.messsageId = messsageId;
		this.title = title;
		this.content = content;
	}
	
	public AbstractMessage(long sendTime, String messsageId, String title,
			String content,String moduleUrl,String moduleid) {
		super();
		this.sendTime = sendTime;
		this.messsageId = messsageId;
		this.title = title;
		this.content = content;
		this.moduleUrl = moduleUrl;
		this.moduleID = moduleid;
	}

	public AbstractMessage(long sendTime, String messsageId, String title) {
		super();
		this.sendTime = sendTime;
		this.messsageId = messsageId;
		this.title = title;
	}

	public String getMesssageId() {
		return messsageId;
	}

	public void setMesssageId(String messsageId) {
		this.messsageId = messsageId;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public long getSendTime() {
		return sendTime;
	}

	public void setSendTime(long sendTime) {
		this.sendTime = sendTime;
	}

	public boolean isEditable() {
		return editable;
	}

	public void setEditable(boolean editable) {
		this.editable = editable;
	}

	public boolean isSelected() {
		return selected;
	}

	public void setSelected(boolean selected) {
		this.selected = selected;
	}

	@SuppressLint("SimpleDateFormat")
	public String getDateTime(String pattern) {
		return new SimpleDateFormat(pattern).format(new Date(sendTime));
	}

	public String getGroupBelong() {
		return groupBelong;
	}

	public void setGroupBelong(String groupBelong) {
		this.groupBelong = groupBelong;
	}

	public void read() {
		setHasRead(true);
		Pool.getPool().execute(new Runnable() {
			@Override
			public void run() {
				AbstractMessage.this.update();
			}
		});
	}

	@Override
	public String toString() {
		return "AbstractMessage [id=" + id + ", sendTime=" + sendTime
				+ ", messsageId=" + messsageId + ", title=" + title
				+ ", content=" + content + ", groupBelong=" + groupBelong
				+ ", hasRead=" + hasRead + ", editable=" + editable
				+ ", selected=" + selected + "]";
	}
	
//	public String getParams(){
//		String params = "" ;
//		MappingModel mappingModel =	redirectToPage(getModuleUrl());
//		if(mappingModel !=null) {
//			params  = getModuleUrl().replace(mappingModel.getLinkURL(), "");
//		}
//		return params;
//	}
//	
//	public MappingModel redirectToPage(String url) {
//		float maxIndex = 0;
//		MappingModel mappingModel = null;
//		if(url == null||url.equals("")) {
//			return mappingModel = null;
//		}
//		String urls[] =url.split("/");
//		for(int i =0;i<RoutingParserHelper.routings.size();i++) {
//			Iterator iter = RoutingParserHelper.routings.get(i).getMappings().entrySet().iterator();
//			while (iter.hasNext()) {
//				Entry entry = (Entry) iter.next();
//				MappingModel val = (MappingModel) entry.getValue();
//				float similarityRatio = getSimilarityRatio(url, val.getLinkURL());
//				if(maxIndex<similarityRatio) {
//					if((urls[1]).equals((val.getLinkURL().split("/")[1])) ) {
//						maxIndex = similarityRatio;
//						mappingModel  = val;
//					}else {
//						maxIndex = 0;
//						mappingModel = null;
//					}
//				}
//			}
//		}
//		return mappingModel;
//	}
//	
//	
//	private int compare(String str, String target) {
//		int d[][]; // ����
//		int n = str.length();
//		int m = target.length();
//		int i; // ����str��
//		int j; // ����target��
//		char ch1; // str��
//		char ch2; // target��
//		int temp; // ��¼��ͬ�ַ�,��ĳ������λ��ֵ������,����0����1
//		if (n == 0) {
//			return m;
//		}
//		if (m == 0) {
//			return n;
//		}
//		d = new int[n + 1][m + 1];
//		for (i = 0; i <= n; i++) { // ��ʼ����һ��
//			d[i][0] = i;
//		}
//
//		for (j = 0; j <= m; j++) { // ��ʼ����һ��
//			d[0][j] = j;
//		}
//
//		for (i = 1; i <= n; i++) { // ����str
//			ch1 = str.charAt(i - 1);
//			// ȥƥ��target
//			for (j = 1; j <= m; j++) {
//				ch2 = target.charAt(j - 1);
//				if (ch1 == ch2) {
//					temp = 0;
//				} else {
//					temp = 1;
//				}
//
//				// ���+1,�ϱ�+1, ���Ͻ�+tempȡ��С
//				d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1]
//						+ temp);
//			}
//		}
//		return d[n][m];
//	}
//
//	private int min(int one, int two, int three) {
//		return (one = one < two ? one : two) < three ? one : three;
//	}
//
//	public float getSimilarityRatio(String str, String target) {
//		return 1 - (float) compare(str, target)
//				/ Math.max(str.length(), target.length());
//	}

	
	
}
